// // 假设以数组 Q[m]存放循环队列的元素，同时设置一个标志域名 tag，
// // 以 tag ==0 和 tag == 1 来区别队头指针（front）和队尾指针（rear）相等时，队列状态为“空”还是“满”。
// // 试编写与此结构相应的插入（EnQueue）和删除（DeQueue）算法。
// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
// #include"windows.h"
// #define MAX_SIZE 100 // 队列的最大容量
//
// // 队列结构体
// typedef struct {
//     int data[MAX_SIZE]; // 存储队列元素的数组
//     int front;          // 队头指针
//     int rear;           // 队尾指针
//     int count;          // 队列中元素的个数
// } CircularQueue;
//
// // 初始化队列
// void initQueue(CircularQueue* q) {
//     q->front = 0; // 队头指针初始化为0
//     q->rear = 0;  // 队尾指针初始化为0
//     q->count = 0; // 队列中元素的个数初始化为0
// }
//
// // 判断队列是否为空
// bool isQueueEmpty(CircularQueue* q) {
//     return q->count == 0; // 队列中元素的个数为0表示队列为空
// }
//
// // 判断队列是否已满
// bool isQueueFull(CircularQueue* q) {
//     return q->count == MAX_SIZE; // 队列中元素的个数等于最大容量表示队列已满
// }
//
// // 入队操作
// bool enqueue(CircularQueue* q, int value) {
//     if (isQueueFull(q)) { // 检查队列是否已满
//         printf("队列已满，无法入队!\n");
//         return false;
//     }
//     q->data[q->rear] = value; // 将元素放入队尾
//     q->rear = (q->rear + 1) % MAX_SIZE; // 队尾指针后移
//     q->count++; // 队列中元素的个数加1
//     return true;
// }
//
// // 出队操作
// bool dequeue(CircularQueue* q, int* value) {
//     if (isQueueEmpty(q)) { // 检查队列是否为空
//         printf("队列为空，无法出队!\n");
//         return false;
//     }
//     *value = q->data[q->front]; // 获取队头元素
//     q->front = (q->front + 1) % MAX_SIZE; // 队头指针后移
//     q->count--; // 队列中元素的个数减1
//     return true;
// }
//
// // 获取队头元素
// bool getFront(CircularQueue* q, int* value) {
//     if (isQueueEmpty(q)) { // 检查队列是否为空
//         printf("队列为空，无法获取队头元素!\n");
//         return false;
//     }
//     *value = q->data[q->front]; // 获取队头元素
//     return true;
// }
//
// // 打印队列
// void printQueue(CircularQueue* q) {
//     if (isQueueEmpty(q)) { // 检查队列是否为空
//         printf("队列为空\n");
//         return;
//     }
//     int i = q->front;
//     for (int j = 0; j < q->count; j++) {
//         printf("%d ", q->data[i]);
//         i = (i + 1) % MAX_SIZE; // 循环遍历队列
//     }
//     printf("\n");
// }
//
// // 销毁队列
// void destroyQueue(CircularQueue* q) {
//     // 由于使用了静态数组，无需释放内存
//     q->front = 0; // 重置队头指针
//     q->rear = 0;  // 重置队尾指针
//     q->count = 0; // 重置队列中元素的个数
// }
//
//
//
// int main() {
//
//     return 0;
// }
//
// // 【算法思想】
// // 在循环队列中，增设一个 tag 类型的整型变量，进队时置 tag 为 1，出队时置 tag为 0（因为入队操作可能导致队满，只有出队操作可能会导致队空）。
// // 队列 Q 初试时，置 tag == 0，front == rear == 0。这样队列的 4 要素如下：
// // 队空条件：Q.front == Q.rear && Q.tag == 0
// // 队满条件：Q.front == Q.rear && Q.tag == 1
// // 进队操作：Q.data[Q.rear] = x; Q.rear = (Q.rear+1)%MaxSize; Q.tag = 1。
// // 出队操作：x = Q.data[Q.front]；Q.front = (Q.front+1)%MaxSize ; Q.tag = 0;